package ThreadProjectTest.ThreadPoolTest;

import java.util.concurrent.*;

/*
 * Author: JacksonCoder
 * FileName: ThreadPoolExample
 * Version: 1.0.0
 */
public class ThreadPoolExample {
    public static void main(String[] args) {
        //
        ExecutorService threadPool = new ThreadPoolExecutor(
                2,
                5,
                1L,
                TimeUnit.SECONDS,
                new LinkedBlockingQueue<>(3), // 阻塞队列
                Executors.defaultThreadFactory(), // 线程工厂
                new ThreadPoolExecutor.AbortPolicy() // 拒绝策略
        );
        try {
            // 模拟10个用户来办理业务，每个用户就是一个来自外部的请求线程
            // 此处设置的拒绝策略为AbortPolicy(),当处理线程都还没处理完第一轮所有请求的情况下，10个请求线程超过了最大线程数加阻塞队列最大值数
            // 无法处理多出的请求，就会启动拒绝策略，这里会抛出异常
            for (int i = 1; i <= 10; i++) {
                threadPool.execute(() -> {
                    System.out.println(Thread.currentThread().getName() + "\t 办理业务");
                });
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            threadPool.shutdown();// 关闭池子
        }

    }
}
